package com.powernobug.util;

import org.apache.commons.beanutils.BeanUtils;

import java.lang.reflect.InvocationTargetException;
import java.util.List;

/**
 * @Author: 肖云戈
 * @CreateTime: 2024-08-31
 * @Description:
 */
public class TransferModelDataUtil {

    private TransferModelDataUtil() {}

    /**
     * 父类 model 转换至 子类 template
     * @param templateClass
     * @param model
     * @return
     * @param <F> 父类类型（可能是List）
     * @param <S> 子类类型（必须是F的子类）
     */
    public static <F, S> Object transferFatherToSon(Class<S> templateClass, F model) {

        // 如果输入是列表
        if (model instanceof List) {
            List<?> modelList = (List<?>) model;
            return modelList.stream()
                    .map(x -> transferFatherToSon(templateClass, x))
                    .toList();
        }

        // 输入是单个对象的情况
        S template = null;
        try {
            template = templateClass.getConstructor().newInstance();
            BeanUtils.copyProperties(template, model);
        } catch (InstantiationException | IllegalAccessException | InvocationTargetException | NoSuchMethodException e) {
            System.out.println("父类model转换至子类template时发生异常！");
            throw new RuntimeException(e);
        }
        return template;
    }
}

